﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using produccion.vistamodelo;
using System.ComponentModel;

namespace produccion.forms
{
    /// <summary>
    /// Lógica de interacción para FRMmanprov.xaml
    /// </summary>
    public partial class FRMmanprov : Window
    {
        manprov _manprov;

        public FRMmanprov()
        {
            InitializeComponent();
            _manprov = (manprov)this.DataContext;
    
        }
   
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            _manprov.listaProv();
            limpiar();
            if (_manprov.lisFilPro.Count > 0)
            {
                dataGrid1.SelectedIndex = 0;
            }
            texCod.Focus();
            texCod.Select(0, 0);
        
        }

        private void limpiar() 
        {
            texCod.Text="";
            texNit.Text="";
            texNom.Text="";
            texDir.Text="";
            texFax.Text="";
            texTel.Text="";
            texRep.Text="";
            texCon.Text="";
            texEma.Text="";
            texConp.Text="";
            texBan.Text="";
            texCue.Text="";
            texFic.Text="";
            comCiu.SelectedValue="";
            datCod.SelectedDate= DateTime.Today;
            datAcp.SelectedDate = DateTime.Today;
            datFin.SelectedDate = DateTime.Today;
            radNor.IsChecked=true;
            radNal.IsChecked=true;
            radCom.IsChecked = true;
            radAct.IsChecked = true;
            _manprov.txtProv.CAMBIO = false;
            texCod.Focus();
            texCod.Select(0, 0);
        }

        string camb;
        private void texCod_TextChanged(object sender, TextChangedEventArgs e)
        {
            if (_manprov.txtProv.CODPRV_PRV != camb)
            {
                if (_manprov.txtProv.CAMBIO)
                {
                    if (MessageBox.Show("¿Está seguro que desea cambiar de elemento? se perderán los cambios no guardados.", "Confirmar", MessageBoxButton.OKCancel, MessageBoxImage.Question) == MessageBoxResult.Cancel)//RRR
                    {
                        _manprov.txtProv.CODPRV_PRV = camb;
                        return;
                    }
                    _manprov.txtProv.CAMBIO = false;
                }
                camb = _manprov.txtProv.CODPRV_PRV;
                _manprov.txtProv.consultar();
                if (!_manprov.txtProv.EXISTE)
                {
                    texNit.Text = "";
                    texNom.Text = "";
                    texDir.Text = "";
                    texFax.Text = "";
                    texTel.Text = "";
                    texRep.Text = "";
                    texCon.Text = "";
                    texEma.Text = "";
                    texConp.Text = "";
                    texBan.Text = "";
                    texCue.Text = "";
                    texFic.Text = "";
                    comCiu.SelectedValue = "";
                    datCod.SelectedDate = DateTime.Today;
                    datAcp.SelectedDate = DateTime.Today;
                    datFin.SelectedDate = DateTime.Today;
                    radNor.IsChecked = true;
                    radNal.IsChecked = true;
                    radCom.IsChecked = true;
                    radAct.IsChecked = true;
                    _manprov.txtProv.CAMBIO = false;
                }
            }
        }

        private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {
            if (_manprov.txtProv.CAMBIO)
            {
                if (MessageBox.Show("¿Está seguro que desea salir? se perderán los cambios no guardados.", "Confirmar", MessageBoxButton.OKCancel, MessageBoxImage.Question) == MessageBoxResult.Cancel)
                {
                    e.Cancel = true;
                }
                else
                {
                    _manprov.txtProv.CAMBIO = false;
                }
            }
        }

        private void butNue_Click(object sender, RoutedEventArgs e)
        {
            if (_manprov.txtProv.CAMBIO)
            {
                if (MessageBox.Show("¿Está seguro que desea crear un nuevo elemento? se perderán los cambios no guardados.", "Confirmar", MessageBoxButton.OKCancel, MessageBoxImage.Question) == MessageBoxResult.Cancel)//RRR
                {
                    return;
                }
                _manprov.txtProv.CAMBIO = false;
            }
            limpiar();
            texCod.Focus();
            texCod.Select(0, 0);
        }

        private void butSal_Click(object sender, RoutedEventArgs e)
        {
              this.Close();
        }
        
        private void butEli_Click(object sender, RoutedEventArgs e)
        {
            if (MessageBox.Show("¿Esta seguro que desea eliminar el elemento?", "Confirmar", MessageBoxButton.OKCancel, MessageBoxImage.Question) == MessageBoxResult.Cancel) {
                return;
            }
            _manprov.eliminar(wPnot);
            limpiar();
        }

        private void butGua_Click(object sender, RoutedEventArgs e)
        {
            string StrDatoFaltante = PrivStr_ValidarDatos();
            if (StrDatoFaltante == "")
            {
                _manprov.guardar(wPnot);
            }
            else
            {
                MessageBoxResult result = MessageBox.Show(this, StrDatoFaltante, "PROCESO CANCELADO", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }
        private string PrivStr_ValidarDatos()
        {
            string StrDatoDevuelto = "";
            if (texRep.Text == "")
            {
                StrDatoDevuelto = "Falta digitar el representante legal";
            }
            return StrDatoDevuelto;
        }
        private void cm_Closed(object sender, RoutedEventArgs e)
        {
            _manprov.filtrar();
        }

        private void quiFil_Click(object sender, RoutedEventArgs e)
        {
            _manprov.quiFil();
        }

        private void dataGrid1_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
                if (_manprov.txtProv.CAMBIO)
                {
                    if (MessageBox.Show("¿Está seguro que desea cambiar de elemento? se perderán los cambios no guardados.", "Confirmar", MessageBoxButton.OKCancel, MessageBoxImage.Question) == MessageBoxResult.Cancel)//RRR
                    {
                       return;
                    }
                    _manprov.txtProv.CAMBIO = true;
                }
                if (_manprov.selProv != null)
                {
                    _manprov.txtProv.CODPRV_PRV = _manprov.selProv.CODPRV_PRV;
                    _manprov.txtProv.EXISTE = true;
                }
        }

        private void butConPrv_Click(object sender, RoutedEventArgs e)
        {
            _manprov.conPrv();
        }

        private void dataGrid1_PreviewKeyDown(object sender, KeyEventArgs e)
        {
            var elemento = e.OriginalSource as UIElement;
            if (e.Key == Key.Enter && elemento != null)
            {
                e.Handled = true;
                elemento.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
            }
        }

        private void Window_KeyDown(object sender, KeyEventArgs e)
        {
            var elemento = e.OriginalSource as UIElement;
            if (e.Key == Key.F3 && elemento != null)
            {
                if (MDOgeneral.logBusquedadAbierta == true) { MDOgeneral.logBusquedadAbierta = false; }
            }

            if (e.Key == Key.F4 && elemento != null)
            {
                if (MDOgeneral.logBusquedadAbierta1 == true) { MDOgeneral.logBusquedadAbierta1 = false; }
            }

            if (e.Key == Key.F5 && elemento != null)
            {
                if (MDOgeneral.logBusquedadAbierta2 == true) { MDOgeneral.logBusquedadAbierta2 = false; }
            }
        }
      
    }

    internal class manprov: ObservableObject
    {

        #region propiedades

        //------------------------------
        private string _strTituloVentana;
        public string strTituloVentana
        {
            get { return _strTituloVentana; }
            set { _strTituloVentana = value; RaisePropertyChangedEvent("strTituloVentana"); }
        }

        private VMbuscarGeneral _buscarProveedor;
        public VMbuscarGeneral buscarProveedor
        {
            get { return _buscarProveedor; }
            set { _buscarProveedor = value; RaisePropertyChangedEvent("buscarProveedor"); }
        }

        private clases.CLSMAEPRVP _txtProv = new clases.CLSMAEPRVP();
        public clases.CLSMAEPRVP txtProv {
            get { return _txtProv; } 
            set { _txtProv = value;
            RaisePropertyChangedEvent("txtProv");
            }
        }

        private clases.CLSMAEPRVP _filProv = new clases.CLSMAEPRVP {
            CODPRV_PRV ="",
            NOMPRV_PRV = "",
            DIRPRV_PRV = "",
            CODCIU_PRV = "",
            TELPRV_PRV = "",
            FAXPRV_PRV = "",
            NITPRV_PRV = "",
            REPPRV_PRV = "",
            CONPRV_PRV = "",
            EMAIL_PRV = "",
            ORIPRV_PRV = "",
            REGVTA_PRV = "",
            BANCO_PRV = "",
            CUENTA_PRV = "",
            ESTADO_PRV = "",
            TIPPRV_PRV = "",
            FICTEC_PRV = "",
            CONPAG_PRV = ""
        };
        public clases.CLSMAEPRVP filProv
        {
            get { return _filProv; }
            set
            {
                _filProv = value;
                RaisePropertyChangedEvent("filProv");
            }
        }

        private clases.CLSMAEPRVP _selProv = new clases.CLSMAEPRVP();
        public clases.CLSMAEPRVP selProv
        {
            get { return _selProv; }
            set
            {
                _selProv = value;
                RaisePropertyChangedEvent("selProv");             
            }
        }

        private List<clases.CLSMAEPRVP> _lisProv = new List<clases.CLSMAEPRVP>();
        public List<clases.CLSMAEPRVP> lisProv
        {
            get { return _lisProv; }
            set
            {
                _lisProv = value;
                RaisePropertyChangedEvent("lisProv");
            }
        }

        private List<clases.CLSMAEPRVP> _lisFilPro = new List<clases.CLSMAEPRVP>();
        public List<clases.CLSMAEPRVP> lisFilPro
        {
            get { return _lisFilPro; }
            set
            {
                _lisFilPro = value;
                RaisePropertyChangedEvent("lisFilPro");
            }
        }

        //Objeto enlazado para el Combobox de ciudades
        private List<clases.CLSMAECIUP> _lisBaseCiu = new clases.CLSMAECIUP().listarBaseCiu();
        public List<clases.CLSMAECIUP> lisBaseCiu
        {
            get { return _lisBaseCiu; }
            set
            {
                _lisBaseCiu = value;
                RaisePropertyChangedEvent("lisBaseCiu");
            }
        }

        #endregion

        #region metodos

        //-------------------------------------------------------------
        public manprov()
        {
            cargar_proveedores();

            MDOgeneral.conectar();
            strTituloVentana = "Mantenimiento de proveedores - Usuario: " + MDOgeneral.usuario + " - [FRMmanprov]";
        }

        private void cargar_proveedores()
        {
            try
            {
                List<clases.CLSMAEPRVP> lisproveedores = new clases.CLSMAEPRVP().listaProv();
                _buscarProveedor = new VMbuscarGeneral((from pro in lisproveedores select new
                    VMlistaGenerica { strColumna1 = pro.CODPRV_PRV, strColumna2 = pro.NITPRV_PRV, strColumna3 = pro.NOMPRV_PRV }).ToList());
                buscarProveedor.PropertyChanged += onBuscarProveedorPropertyChanged;
                buscarProveedor.gridBuscar.columna1.strNombre = "Código";
                buscarProveedor.gridBuscar.columna2.strNombre = "Nit                ";
                buscarProveedor.gridBuscar.columna3.strNombre = "Nombre                             ";
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        void onBuscarProveedorPropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            try
            {
                if (e.PropertyName == "IsOpen")
                {
                    if (!buscarProveedor.IsOpen)
                    {
                        if (buscarProveedor.gridBuscar.selLista != null)
                        {
                            txtProv.CODPRV_PRV = buscarProveedor.gridBuscar.selLista.strColumna1;
                        }
                    }
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        RelayCommand _cmdBuscarProveedor;
        public ICommand cmdBuscarProveedor
        {
            get
            {
                if (_cmdBuscarProveedor == null)
                {
                    _cmdBuscarProveedor = new RelayCommand(r => buscar_proveedor());
                }
                return _cmdBuscarProveedor;
            }
        }

        private void buscar_proveedor()
        {
            try
            {
                buscarProveedor.IsOpen = true;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        
        public void listaProv()
        {
            try
            {
                lisProv = selProv.listaProv();
                lisFilPro = lisProv;
            }
            catch (Exception ex) {MessageBox.Show(ex.Message);}
        }
        
        public void guardar(WrapPanel wPnot)
        {
            try
            {

                if (txtProv.EXISTE)
                {
                    if (txtProv.actualizar() > 0)
                    {
                        txtProv.CAMBIO = false;
                        lisProv.Clear();
                        lisProv = txtProv.listaProv();
                        filtrar();
                        new MDOgeneral.notificar(wPnot, "Los cambios fueron guardados satisfactoriamente.", true);
                    }
                    else
                    {
                        new MDOgeneral.notificar(wPnot, "Los cambios no pueden ser guardados.", false);
                    }
                }
                else
                {
                    if (txtProv.insertar() > 0)
                    {
                        txtProv.CAMBIO = false;
                        txtProv.EXISTE = true;
                        lisProv.Clear();
                        lisProv = txtProv.listaProv();
                        filtrar();                       
                        new MDOgeneral.notificar(wPnot, "El elemento fue creado satisfactoriamente.", true);
                    }
                    else
                    {
                        new MDOgeneral.notificar(wPnot, "El elemento no puede ser creado.", false);
                    }
                }

            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }
        
        public void eliminar(WrapPanel wPnot)
        {
            try
            {
                if (txtProv.eliminar() > 0)
                {
                    txtProv.CAMBIO = false;
                    lisProv.Clear();
                    lisProv = txtProv.listaProv();
                    filtrar();
                    new MDOgeneral.notificar(wPnot, "El elemento ha sido eliminado satisfactoriamente.", true);
                }
                else
                {
                    new MDOgeneral.notificar(wPnot, "El elemento no puede ser eliminado.", false);
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }     
        }

        public void filtrar() {

            lisFilPro = lisProv.FindAll(r => 
            r.CODPRV_PRV.ToUpper().Contains(filProv.CODPRV_PRV.ToUpper())&
            r.NOMPRV_PRV.ToUpper().Contains(filProv.NOMPRV_PRV.ToUpper()) &
            r.DIRPRV_PRV.ToUpper().Contains(filProv.DIRPRV_PRV.ToUpper()) &
            r.CODCIU_PRV.ToUpper().Contains(filProv.CODCIU_PRV.ToUpper()) &
            r.TELPRV_PRV.ToUpper().Contains(filProv.TELPRV_PRV.ToUpper()) &
            r.FAXPRV_PRV.ToUpper().Contains(filProv.FAXPRV_PRV.ToUpper()) &
            r.NITPRV_PRV.ToUpper().Contains(filProv.NITPRV_PRV.ToUpper()) &
            r.REPPRV_PRV.ToUpper().Contains(filProv.REPPRV_PRV.ToUpper()) &
            r.CONPRV_PRV.ToUpper().Contains(filProv.CONPRV_PRV.ToUpper()) &
            r.EMAIL_PRV.ToUpper().Contains(filProv.EMAIL_PRV.ToUpper()) &
            r.ORIPRV_PRV.ToUpper().Contains(filProv.ORIPRV_PRV.ToUpper()) &
            r.REGVTA_PRV.ToUpper().Contains(filProv.REGVTA_PRV.ToUpper()) &
            r.BANCO_PRV.ToUpper().Contains(filProv.BANCO_PRV.ToUpper()) &
            r.CUENTA_PRV.ToUpper().Contains(filProv.CUENTA_PRV.ToUpper()) &
            r.ESTADO_PRV.ToUpper().Contains(filProv.ESTADO_PRV.ToUpper()) &
            r.TIPPRV_PRV.ToUpper().Contains(filProv.TIPPRV_PRV.ToUpper()) &
            r.FICTEC_PRV.ToUpper().Contains(filProv.FICTEC_PRV.ToUpper()) &
            r.CONPAG_PRV.ToUpper().Contains(filProv.CONPAG_PRV.ToUpper())
            
            );
            lisFilPro.Add(new clases.CLSMAEPRVP
            {
                CODPRV_PRV = "",
                NOMPRV_PRV = "",
                DIRPRV_PRV = "",
                CODCIU_PRV = "",
                TELPRV_PRV = "",
                FAXPRV_PRV = "",
                NITPRV_PRV = "",
                REPPRV_PRV = "",
                CONPRV_PRV = "",
                EMAIL_PRV = "",
                ORIPRV_PRV = "",
                REGVTA_PRV = "",
                BANCO_PRV = "",
                CUENTA_PRV = "",
                FECCOD_PRV = DateTime.Today,
                FECACE_PRV = DateTime.Today,
                FECFIN_PRV = DateTime.Today,
                ESTADO_PRV = "",
                TIPPRV_PRV = "",
                FICTEC_PRV = "",
                CONPAG_PRV = ""
            });
        }

        public void quiFil()
        {
            filProv = new clases.CLSMAEPRVP
            {
                CODPRV_PRV = "",
                NOMPRV_PRV = "",
                DIRPRV_PRV = "",
                CODCIU_PRV = "",
                TELPRV_PRV = "",
                FAXPRV_PRV = "",
                NITPRV_PRV = "",
                REPPRV_PRV = "",
                CONPRV_PRV = "",
                EMAIL_PRV = "",
                ORIPRV_PRV = "",
                REGVTA_PRV = "",
                BANCO_PRV = "",
                CUENTA_PRV = "",
                FECCOD_PRV = DateTime.Today,
                FECACE_PRV = DateTime.Today,
                FECFIN_PRV = DateTime.Today,
                ESTADO_PRV = "",
                TIPPRV_PRV = "",
                FICTEC_PRV = "",
                CONPAG_PRV = ""
            };
            lisFilPro = lisProv;
        }        
        #endregion


        public void conPrv() 
        {
            try 
            {
                clases.CLSMAEPRVP datos = new clases.CLSMAEPRVP();
                FRMbuscar frm = new FRMbuscar(datos, "buscar", "Nombre_Proveedor", "NOMPRV_PRV", "Codigo");
                frm.ShowDialog();
                txtProv.CODPRV_PRV = frm.retorno;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

    }
}
